#include <stdlib.h>
#include <gtkmm-2.4/gtkmm.h>
#include <libglademm-2.4/libglademm/xml.h>
#include <gdkmm-2.4/gdkmm.h>
#include <sigc++-2.0/sigc++/sigc++.h>

#include "VistaGtkmm.h"

#include <stdlib.h>
#include "../Modelo/Primitiva.h"
#include "../Modelo/Punto.h"
#include "../Modelo/Linea.h"
#include "../Modelo/Rectangulo.h"
#include "../Modelo/Circulo.h"
#include "../Modelo/Triangulo.h"
#include "../Vista/Vista.h"
#include "../Modelo/Modelo.h"

typedef Glib::RefPtr<Gtk::Builder> xmlref_t;

int main(int argc, char** argv) {
    Gtk::Main app(argc, argv);
    xmlref_t refXml;
    Ventana* w = NULL;
    Gtk::Window* pDialog = NULL;		// El dialogo que es la ventana ppal.
    
    // Cargar fichero de glade
    try {
        refXml = Gtk::Builder::create_from_file("app.glade");
    } catch(Gtk::BuilderError& ex) {
        std::cerr << ex.code() << std::endl;
        return 1;
    }

    // Instanciamos el dialogo inicial.
    refXml->get_widget("ventana_principal", pDialog);
    if(pDialog) {
        pDialog->set_title("DibujUA");

        //Sirve para cerrar la aplicación si se oculta la ventana principal
        pDialog->signal_hide().connect(sigc::ptr_fun(Gtk::Main::quit));

        w = new Ventana(refXml);
    
        Modelo m;
        w->PonerModelo(&m);

        //start the event loop
        Gtk::Main::run();

        // Liberamos memoria.
        delete w;
        delete pDialog;
    }

    return 0;
}
